<?php

namespace App\Console\Gather;


use App\Models\Article;
use App\Service\Collect\Sogou as Service;
use Illuminate\Console\Command;


class Sogou extends Base
{
    /**
     * 采集舆情文章
     *
     * 参数与选项的区别
     *      在执行命令时，参数必须严格按定义时的顺序输入，不需输入参数名，只需输入参数的值即可。
     *      输入选项则必须带选项名，且选项名前须加 -- 前缀（选项简写字母前加 -），选项可按任意顺序输入
     */

    // sudo -u www php /www/wwwroot/option/artisan command:gather-sogou
    //  php artisan command:gather-sogou
    // 请求 以及参数
    // protected $signature = 'command:name {param1} {param2}';  // 必填参数
    // protected $signature = 'command:name {参数名?} {参数名=默认值} {参数名? : 参数说明}';  // 可选参数
    // protected $signature = 'command:name {--选项名} {--选项名=} {--选项名=默认值} {--简写字母|选项名} {--选项名 : 选项说明}';  // 选项

    protected $signature   = 'command:gather-sogou';
    protected $description = '采集搜狗微信';

    // 执行
    public function handle()
    {
        // 搜狗微信 链接会过期 所以把所有的搜狗的文章设置为过期
        (new Article())->where('site_id', 2)->update(['verify' => 0]);

        $keyword = '易见股份';
        $page    = 1;
        $size    = 10;
        for($page = 1; $page <= 10; $page++){
            $this->getAndSave($keyword, $page, $size);
        }


        $this->showMsg('采集完成！');
    }

    // 采集并保存到数据库
    public function getAndSave($keyword, $page, $size)
    {
        $collect = new \App\Service\Collect\Sogou();
        $list    = $collect->getApiList($keyword, $page, $size);
        $collect->setKeyword($keyword);
        if(empty($list)){
            $message = $collect->getError() ?: '没有采集数据！';
            $this->showMsg($message, $collect->getCode());

            return true;
        }


        // 展示
        // $this->show($list[0]);

        // 采集详情内容
        //   TODO 这里采集的是百度的内容
        foreach($list as $key => $item){
            // 提示
            $this->showMsg(' '.($key + 1).'：==> 采集文章：'.$item['title']);

            $res = $collect->saveApiDataToDb($item, $key);
            if($res === false){
                $this->showError($collect->getError(), $collect->getCode());
            }
        }

        return true;
    }


}
